package net.linku.utils;

import java.math.BigDecimal;

/**
 * @ClassName BmiCalculatorUtil
 * @Description: 身高，体重计算方式
 * @Author SilenceTian
 * @Date 2024/1/4
 * @Version V1.0.2
 **/
public class BmiCalculatorUtil {

    /**
     * 当根据身高和体重来判断身材是否偏瘦或偏胖时，通常会使用身体质量指数（BMI，Body Mass Index）来进行评估。BMI是一种衡量体重相对于身高的指标。计算公式为：
     * <p>
     * BMI = 体重（kg） / (身高（m）)^2
     * <p>
     * 根据世界卫生组织（WHO）的标准，BMI的范围可以用于评估体重：
     * <p>
     * BMI小于 18.5：偏瘦
     * BMI在 18.5 到 24.9 之间：正常体重
     * BMI在 25 到 29.9 之间：偏胖
     * BMI大于等于 30：肥胖
     *
     * @param height 身高  厘米
     * @param weight 体重  千克
     * @return
     */
    public static String calculateBmiCategory(BigDecimal height, BigDecimal weight) {
        // 身高单位为米
        BigDecimal heightInMeter = height.divide(BigDecimal.valueOf(100));

        // 计算BMI
        BigDecimal heightSquare = heightInMeter.multiply(heightInMeter);
        BigDecimal bmi = weight.divide(heightSquare, 2, BigDecimal.ROUND_HALF_UP);

        // 判断BMI范围
        if (bmi.compareTo(BigDecimal.valueOf(18.5)) < 0) {
            return "偏瘦";
        } else if (bmi.compareTo(BigDecimal.valueOf(18.5)) >= 0 && bmi.compareTo(BigDecimal.valueOf(25)) < 0) {
            return "正常";
        } else if (bmi.compareTo(BigDecimal.valueOf(25)) >= 0 && bmi.compareTo(BigDecimal.valueOf(30)) < 0) {
            return "偏胖";
        } else {
            return "肥胖";
        }
    }

    public static void main(String[] args) {
        // 举例：身高170cm，体重60kg
        BigDecimal height = BigDecimal.valueOf(170.0);
        BigDecimal weight = BigDecimal.valueOf(60.0);

        String category = calculateBmiCategory(height, weight);
        System.out.println("BMI类别：" + category);
    }
}
